//顺序表基本运算算法
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef char ElemType;
/*  定义顺序表的结构体*/
typedef struct{
    ElemType data[MaxSize];
    int length;
}SqList;

void InitList(SqList *&L  )
{
	L = (SqList *)malloc(sizeof(SqList));
    L -> length=0;
}
 void DestroyList(SqList *L)
 {
 	free(L);
 }
 bool ListEmpty(SqList *L)
 {
     return (L->length==0);
       
 }
 int ListLength(SqList * L)
 {
 	return (L->length);
 }
 void DispList(SqList *L)
{
        for(int i = 0;i<L->length;i++)
            printf("%c",L->data[i]);
        printf("\n");
}
 bool GetElem(SqList *L,int i,ElemType &e)
 {
 	if(i<1 || i>L->length)
        return false;
    e=L->data[i-1];
    return true;

 }
 int LocateElem(SqList *&L,ElemType e)
 {
 	int i = 0;
    while(i<L -> length && L->data[i]!=e)
        i++;
    if(i>=L->length)
        return 0;
    else
        return i+1;  
 }
bool ListInsert(SqList *&L,int i,ElemType e)
{
	int j;
    if(i<1 || i>L->length+1||L->length==MaxSize)
        return false;
    i--;
    for(j=L -> length;j>i;j--)
        L->data[j]=L->data[j-1];
    L->data[i]=e;
    L->length++;
    return true;
}
bool ListDelete(SqList *&L,int i ,ElemType &e)
{
	int j;
    if(i<1 || i>L->length+1)
        return false;
    i--;
    e=L->data[i];
    for(j=i;j<L->length-1;j++)
        L->data[j]=L->data[j+1];
    L->length--;
    return true;
}

int main()
{
	
	SqList *L;ElemType e;                     //补充变量定义
	printf("1.初始化顺序表L\n");
	InitList(L);                           //补充调用函数
    printf("2.插入\n");
	ListInsert(L,1,'a');
    ListInsert(L,2,'b');
    ListInsert(L,3,'c');
    ListInsert(L,4,'d');
    ListInsert(L,5,'e');
    printf("3.顺序输出L:\n");
    DispList(L);                                      //补充调用函数         
    printf("4.长度=%d\n",ListLength(L) );              //补充调用函数
        printf("判断顺序表是否为空\n");
        printf("%d\n",ListEmpty(L) );                 //补充调用函数
        printf("输出顺序表第3个元素\n");
        GetElem(L,3,e);                                        //补充调用函数
        printf("%c\n",e);
        printf("输出元素a的位置\n");
        printf("%d\n",LocateElem(L,'a') );                         //补充调用函数
        printf("在第四个元素位置上插入f元素\n");
        ListInsert(L,4,'f');                                     //补充调用函数
        printf("输出顺序表L\n");
        DispList(L);                                        //补充调用函数
        printf("删除线性表上第3个元素\n");
        ListDelete(L,3,e);                                                 //补充调用函数
        printf("输出顺序表\n");
        DispList(L);                                                     //补充调用函数
        printf("释放顺序表L\n");
        DestroyList(L);                                                                //补充调用函数
}
